package com.ihr360.rest.service;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

public interface SimpleRestService<T,ID extends Serializable> {

    /**
     * get One Record by Id
     * @param id
     * @return
     */
    T getOne(ID id);

    /**
     * get All Record
     *
     * @return
     */
    Iterable<T> getAll();

    /**
     * 获取公司级别的数据
     * @return
     */
    Iterable<T> getAllInCompany();

    /**
     * 批量删除记录
     * @param ids
     */
    void batchDelete(List<ID> ids);

    /**
     * 根据id删除
     * @param id
     */
    void deleteOne(ID id);

    /**
     * 更新一条记录
     * @param id
     * @param map
     * @return
     */
    T update(ID id,Map<String,Object> map);

    /**
     * 创建实体
     * @param t
     * @return
     */
    T create(T t);

    /**
     * 更新或创建
     * notes: id必须和实体中的id保持一致
     *
     * @param id
     * @param t
     * @return
     */
    T createOrUpdate(ID id, T t);


    /**
     * 通过检索条件查询记录
     * @param specification
     * @param pageable
     * @param isNoData
     * @return
     */
    Page<T> search(Specification<T> specification, Pageable pageable, boolean isNoData);
}